package com.xuecheng.content.model.dto;

import com.xuecheng.base.exception.ValidationGroups;
import lombok.Data;
import lombok.ToString;

import javax.validation.constraints.*;

/**
 * 保存课程计划dto，包括新增、修改
 */
@Data
@ToString
public class SaveTeachplanDto {

    /**
     * 教学计划id（新增时可为null，修改时必传）
     */
    private Long id;

    /**
     * 课程计划名称
     * 适用@NotBlank：字符串非空且去除空格后长度>0
     */
    @NotBlank(message = "新增课程名称不能为空", groups = {ValidationGroups.Insert.class})
    @NotBlank(message = "修改课程名称不能为空", groups = {ValidationGroups.Update.class})
    private String pname;

    /**
     * 课程计划父级Id
     * 适用@NotNull：Long类型不能为null；@PositiveOrZero：确保≥0（父级ID通常从0开始）
     */
//    @NotNull(message = "课程计划父级id不能为空")
//    @PositiveOrZero(message = "父级ID不能为负数")
    private Long parentid;

    /**
     * 层级，分为1、2、3级
     * 适用@NotNull：Integer类型不能为null；@Min/@Max：限制范围（1-3）
     */
//    @NotNull(message = "课程计划层级不能为空")
//    @Min(value = 1, message = "层级不能小于1")
//    @Max(value = 3, message = "层级不能大于3")
    private Integer grade;

    /**
     * 课程类型:1视频、2文档（字符串类型）
     * 适用@NotBlank：确保字符串非空；可追加@Pattern验证格式
     */
//    @NotBlank(message = "课程类型不能为空")
//    @Pattern(regexp = "^[12]$", message = "课程类型只能是1（视频）或2（文档）")
    private String mediaType;

    /**
     * 课程标识（Long类型）
     * 适用@NotNull：不能为null；@Positive：确保是正数（课程ID通常>0）
     */
//    @NotNull(message = "课程标识不能为空")
//    @Positive(message = "课程ID必须为正数")
    private Long courseId;

    /**
     * 课程发布标识（Long类型）
     * 适用@NotNull：不能为null；@Positive：确保是正数
     */
//    @NotNull(message = "课程发布标识不能为空")
//    @Positive(message = "课程发布ID必须为正数")
    private Long coursePubId;

    /**
     * 是否支持试学或预览（字符串类型，如"true"/"false"或"0"/"1"）
     * 适用@NotBlank：确保非空；可追加@Pattern验证格式
     */
//    @NotBlank(message = "请选择是否支持试学或预览")
//    @Pattern(regexp = "^(true|false)$", message = "是否预览只能是true或false")
    private String isPreview;
}